#pragma once

#include <cstddef>
#include <optional>
#include <utility>
#include <list>

class color_buffer
{
public:
	void clear(double r_ = 0.0, double g_ = 0.0, double b_ = 0.0, double a_ = 1.0);
};

class depth_buffer
{
public:
	void clear(double d_);
};

class stencil_buffer
{

};

constexpr double farest_depth = 1.0;

constexpr double nearest_depth = 0.0;

class framebuffer
{
protected:
	std::optional<depth_buffer> _depBuffer;
	std::optional<stencil_buffer> _stencBuffer;
	std::list<color_buffer> _colorBuffers;
public:
	std::optional<depth_buffer>& depth()
	{
		return _depBuffer;
	}

	std::optional<stencil_buffer>& stencil()
	{
		return _stencBuffer;
	}

	std::list<color_buffer>& colors()
	{
		return _colorBuffers;
	}
};